package cn.fansunion.leecode.isNumber;

import java.util.ArrayList;
import java.util.List;

import cn.fansunion.leecode.kit.Kit;

/**
 * 1323. 6 和 9 组成的最大数字<br/>
 * 给你一个仅由数字 6 和 9 组成的正整数 num。<br/>
 * 
 * 你最多只能翻转一位数字，将 6 变成 9，或者把 9 变成 6 。<br/>
 * 
 * 请返回你可以得到的最大数字。<br/>
 * https://leetcode-cn.com/problems/maximum-69-number/
 * 
 * @author wen.lei@brgroup.com
 *
 *         2022-2-19
 */
public class Maximum69Number {
    /*示例 1：
    
    输入：num = 9669
    输出：9969
    解释：
    改变第一位数字可以得到 6669 。
    改变第二位数字可以得到 9969 。
    改变第三位数字可以得到 9699 。
    改变第四位数字可以得到 9666 。
    其中最大的数字是 9969 。
    示例 2：
    
    输入：num = 9996
    输出：9999
    解释：将最后一位从 6 变到 9，其结果 9999 是最大的数。
    示例 3：
    
    输入：num = 9999
    输出：9999
    解释：无需改变就已经是最大的数字了。
     
    
    提示：
    
    1 <= num <= 10^4
    num 每一位上的数字都是 6 或者 9 。*/
    /**
     * 题目核心意思：把出现在最高位的6换成9，如果有的话
     * 
     * @param num
     * @return
     */
    public int maximum69Number(int num) {
        //leecode很多题目，都可以用到最常用的工具类。实际在leecode执行，需要把它们作为类的private方法
        List<Integer> digitList = Kit.intToDigitList(num);
        List<Integer> newDigitList = new ArrayList<>();
        boolean flag = false;
        for (Integer digit : digitList) {
            if (digit.equals(6) && !flag) {
                newDigitList.add(9);
                flag = true;
            } else {
                newDigitList.add(digit);
            }
        }
        return Kit.digitListToInt(newDigitList);
    }
    
    //int->str,从0到length-1，把第1个6转换成9
    public int maximum69Number2(int num) {
        String s = String.valueOf(num);
        s = s.replaceFirst("6","9");
       return Integer.parseInt(s);
    }
}
